TCP (Transmission Control Protocol) has been used as a reliable transport layer protocol for packet data networking for decades. It is particularly seen combined with Internet Protocol for TCP/IP and has been improved continuously over the years.
In the Internet, packet loss can occur because of transmission errors, but occurs more commonly because of congestion. TCP's has a congestion control mechanism that sees end-to-end packet loss and reacts by reducing the number of outstanding unacknowledged data segments allowed in the network.
However, not all Internet applications use TCP and therefore do not follow the same concept of congestion control. Some audio/video streaming applications, for example, use UDP (User Datagram Protocol) not TCP. Streaming is currently used for Internet audio players, IP-telephony, video conferencing and similar types of real-time applications. Since these applications commonly do not integrate TCP-compatible congestion control mechanisms, they treat competing TCP flows differently from how TCP flows treat other flows. Typically upon encountering congestion, all contending TCP-flows reduce their data rates in an attempt to dissolve the congestion, while the non-TCP flows continue to send at their original rate. This can lead to starvation of the TCP traffic, or even to a congestion collapse. The available bandwidth in a network is almost exclusively occupied by packets that are discarded because of congestion before they reach their destination. Congestion control is further limited in TCP and other mechanisms because the operations are performed in a distributed manner and are based on a limited knowledge about the congestion status of the overall network.